/**
* Copyright (C) 2019, the original author or authors. All rights reserved.
 *
 * This program and the accompanying materials are dual-licensed under
 * either the terms of the Eclipse Public License v1.0 as published by
 * the Eclipse Foundation
 *
 *   or (per the licensee's choosing)
 *
 * under the terms of the GNU Lesser General Public License version 2.1
 * as published by the Free Software Foundation.
*/

package com.zhuojh.netease.im.server.request.msg;

import java.util.List;

import com.zhuojh.netease.im.server.request.BaseHttpRequest;

/**
 * Function: 批量发送点对点普通消息请求对象. <br>
 * Reason: TODO ADD REASON. <br>
 * Date: 2019年1月21日 下午9:07:25
 * @author zhuojianhui@gmail.com
 * @since 1.0
 * @description 批量发送点对点普通消息。<br>
 *              POST https://api.netease.im/nimserver/msg/sendBatchMsg.action HTTP/1.1 <br>
 *              Content-Type:application/x-www-form-urlencoded;charset=utf-8 <br>
 *              接口描述:1.给用户发送点对点普通消息，包括文本，图片，语音，视频，地理位置和自定义消息。<br>
 *              2.最大限500人，只能针对个人,如果批量提供的帐号中有未注册的帐号，会提示并返回给用户。<br>
 *              3.此接口受频率控制，一个应用一分钟最多调用120次，超过会返回416状态码，并且被屏蔽一段时间；<br>
 *              具体消息参考下面描述。<br>
 * 
 */
public class MsgSendBatchRequest extends BaseHttpRequest {

	@Override
	public String getPath() {
		return "msg/sendBatchMsg.action";
	}

	/** from:发送者accid，用户帐号，最大32字符，必须保证一个APP内唯一. */
	private String fromAccid;

	/** toAccids:["aaa","bbb"]（JSONArray对应的accid，如果解析出错，会报414错误），限500人. */
	private List<String> toAccids;

	/**
	 * type:0 表示文本消息, 1 表示图片， 2 表示语音， 3 表示视频， 4 表示地理位置信息， 6 表示文件，<br>
	 * 100 自定义消息类型（特别注意，对于未对接易盾反垃圾功能的应用，该类型的消息不会提交反垃圾系统检测）.
	 */
	private int type;

	/** body:请参考下方消息示例说明中对应消息的body字段，最大长度5000字符，为一个JSON串. */
	private MsgBody body;

	/**
	 * option:发消息时特殊指定的行为选项,JSON格式，可用于指定消息的漫游，存云端历史，发送方多端同步，推送，消息抄送等特殊行为;option中字段不填时表示默认值 ，option示例:<br>
	 * {"push":false,"roam":true,"history":false,"sendersync":true,"route":false,"badge":false,"needPushNick":true}<br>
	 * 字段说明： 1. roam: 该消息是否需要漫游，默认true（需要app开通漫游消息功能）；<br>
	 * 2. history: 该消息是否存云端历史，默认true；<br>
	 * 3. sendersync: 该消息是否需要发送方多端同步，默认true；<br>
	 * 4. push: 该消息是否需要APNS推送或安卓系统通知栏推送，默认true； <br>
	 * 5. route: 该消息是否需要抄送第三方；默认true (需要app开通消息抄送功能);<br>
	 * 6. badge:该消息是否需要计入到未读计数中，默认true; <br>
	 * 7. needPushNick: 推送文案是否需要带上昵称，不设置该参数时默认true;<br>
	 * 8. persistent: 是否需要存离线消息，不设置该参数时默认true。.
	 */
	private String option;

	/** pushcontent:ios推送内容，不超过500字符，option选项中允许推送（push=true），此字段可以指定推送内容. */
	private String pushcontent;

	/** payload:ios 推送对应的payload,必须是JSON,不能超过2k字符. */
	private String payload;

	/** ext:开发者扩展字段，长度限制1024字符. */
	private String ext;

	/** bid:可选，反垃圾业务ID，实现“单条消息配置对应反垃圾”，若不填则使用原来的反垃圾配置. */
	private String bid;

	/**
	 * useYidun:可选，单条消息是否使用易盾反垃圾，可选值为0。<br>
	 * 0：（在开通易盾的情况下）不使用易盾反垃圾而是使用通用反垃圾，包括自定义消息。<br>
	 * 若不填此字段，即在默认情况下，若应用开通了易盾反垃圾功能，则使用易盾反垃圾来进行垃圾消息的判断.
	 */
	private int useYidun;

	/** markRead: 可选，群消息是否需要已读业务（仅对群消息有效），0:不需要，1:需要. */
	private int markRead;

	/** 是否需要返回消息ID false：不返回消息ID（默认值） true：返回消息ID（toAccids包含的账号数量不可以超过100个） */
	private Boolean returnMsgid;

	/**
	 * Creates a new instance of MsgSendBatchRequest. <br>
	 * 参数为必填字段
	 * @param fromAccid
	 * @param toAccids
	 * @param type
	 * @param body
	 */
	public MsgSendBatchRequest(String fromAccid, List<String> toAccids, int type, MsgBody body) {
		super();
		this.fromAccid = fromAccid;
		this.toAccids = toAccids;
		this.type = type;
		this.body = body;
	}

	public String getFromAccid() {
		return fromAccid;
	}

	public void setFromAccid(String fromAccid) {
		this.fromAccid = fromAccid;
	}

	public List<String> getToAccids() {
		return toAccids;
	}

	public void setToAccids(List<String> toAccids) {
		this.toAccids = toAccids;
	}

	public int getType() {
		return type;
	}

	public void setType(int type) {
		this.type = type;
	}

	public MsgBody getBody() {
		return body;
	}

	public void setBody(MsgBody body) {
		this.body = body;
	}

	public String getOption() {
		return option;
	}

	public void setOption(String option) {
		this.option = option;
	}

	public String getPushcontent() {
		return pushcontent;
	}

	public void setPushcontent(String pushcontent) {
		this.pushcontent = pushcontent;
	}

	public String getPayload() {
		return payload;
	}

	public void setPayload(String payload) {
		this.payload = payload;
	}

	public String getExt() {
		return ext;
	}

	public void setExt(String ext) {
		this.ext = ext;
	}

	public String getBid() {
		return bid;
	}

	public void setBid(String bid) {
		this.bid = bid;
	}

	public int getUseYidun() {
		return useYidun;
	}

	public void setUseYidun(int useYidun) {
		this.useYidun = useYidun;
	}

	public int getMarkRead() {
		return markRead;
	}

	public void setMarkRead(int markRead) {
		this.markRead = markRead;
	}

	public Boolean getReturnMsgid() {
		return returnMsgid;
	}

	public void setReturnMsgid(Boolean returnMsgid) {
		this.returnMsgid = returnMsgid;
	}

}
